package com.cheifsteam.springframework.aop;

import java.lang.reflect.Method;

/**
 * 方法前置通知接口，扩展自BeforeAdvice，用于在目标方法执行前实施增强
 *
 * @author qrx
 * @date 2025/8/6 14:28
 * @description: 定义AOP中方法调用前的拦截逻辑，是Spring AOP的核心扩展点之一
 *
 * 注意：此接口在Spring 5.3+中被标记为@FunctionalInterface，
 * 可以使用lambda表达式实现
 */
public interface MethodBeforeAdvice extends BeforeAdvice {

    /**
     * 在目标方法执行前触发的回调方法（继承自BeforeAdvice）
     *
     * @param method 目标方法的反射对象
     * @param args 方法参数数组
     * @param target 被代理的目标对象
     * @throws Throwable 允许抛出任何异常
     *
     * 典型实现模式：
     * 1. 无返回值的拦截逻辑（如日志/权限校验）
     * 2. 可以通过修改args参数数组来改变方法入参
     * 3. 抛出异常将阻止目标方法执行
     *
     * Spring整合示例：
     * @Bean
     * public MethodBeforeAdvice transactionAdvice() {
     *     return (method, args, target) -> {
     *         TransactionManager.begin();
     *     };
     * }
     */
    void before(Method method, Object[] args, Object target) throws Throwable;
}
